//#include <iostream>
//#include <string>
//using namespace std;
//
//int n;
//char a[110][110];
//bool st[110][110] = { 0 };
//
//string s = "yizhong";
//
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= n; j++)
//		{
//			cin >> a[i][j];
//		}
//	}
//
//
//
//	return 0;
//}
//
//
//



//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//typedef long long ll;
//
//const int N = 2010;
//
//int n, c;
//int x[N] = { 0 };
//int y[N] = { 0 };
//
//int pos = 0;
//struct node
//{
//	int x;
//	int y;
//	ll w;
//
//}e[N * N];
//
//int fa[N * N] = { 0 };
//
//int find(int x)
//{
//	return fa[x] == x ? x : fa[x] = find(fa[x]);
//}
//
//void un(int x, int y)
//{
//	fa[find(x)] = find(y);
//}
//
//bool cmp(node& a, node& b)
//{
//	return a.w < b.w;
//}
//
//void kk()
//{
//	for (int i = 1; i <= pos; i++)
//	{
//		fa[i] = i;
//	}
//
//	int cnt = 0;
//	ll ret = 0;
//	for (int i = 1; i <= pos; i++)
//	{
//		int a = e[i].x;
//		int b = e[i].y;
//		ll w = e[i].w;
//
//		if (find(a) != find(b))
//		{
//			un(a, b);
//			cnt++;
//			ret += w;
//		}
//	}
//
//	if (cnt == n - 1)
//		cout << ret << endl;
//	else
//		cout << -1 << endl;
//
//}
//
//int main()
//{
//	cin >> n >> c;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> x[i] >> y[i];
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = i + 1; j <= n; j++)
//		{
//			ll w = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
//			if (w >= c)
//			{
//				e[++pos].w = w;
//				e[pos].x = i;
//				e[pos].y = j;
//			}
//		}
//	}
//
//	sort(e + 1, e + 1 + pos, cmp);
//
//	kk();
//
//	return 0;
//}




//#include <iostream>
//#include <cstring>
//#include <string>
//using namespace std;
//
//typedef long long ll;
//
//const int N = 1010;
//
//int dx[] = { 1, 0, -1, 0 };
//int dy[] = { 0, -1, 0, 1 };
//
//int n, m;
//
//struct node
//{
//	ll x;
//	ll y;
//}a[N], b[N];
//
//ll f[N][N] = { 0 };
//
//string s1, s2;
//
//ll dist(int i, int j)
//{
//	return (a[i].x - b[j].x) * (a[i].x - b[j].x) + (a[i].y - b[j].y) * (a[i].y - b[j].y);
//}
//
//int main()
//{
//	cin >> n >> m;
//	cin >> a[0].x >> a[0].y;
//	cin >> b[0].x >> b[0].y;
//	cin >> s1 >> s2;
//
//	
//	for (int i = 0; i < s1.size(); i++)
//	{
//		char c = s1[i];
//		int idx = 0;
//		if (c == 'S')
//			idx = 1;
//		else if (c == 'W')
//			idx = 2;
//		else if (c == 'N')
//			idx = 3;
//
//		a[i + 1].x = a[i].x + dx[idx];
//		a[i + 1].y = a[i].y + dy[idx];
//	}
//
//	//for (int i = 0; i <= n; i++)
//	//{
//	//	printf("( %d, %d )->", a[i].x, a[i].y);
//	//}
//	//cout << endl;
//	for (int i = 0; i < s2.size(); i++)
//	{
//		char c = s2[i];
//		int idx = 0;
//		if (c == 'S')
//			idx = 1;
//		else if (c == 'W')
//			idx = 2;
//		else if (c == 'N')
//			idx = 3;
//
//		b[i + 1].x = b[i].x + dx[idx];
//		b[i + 1].y = b[i].y + dy[idx];
//	}
//
//	//for (int i = 0; i <= m; i++)
//	//{
//	//	printf("(%d, %d)->", b[i].x, b[i].y);
//	//}
//	//cout << endl;
//	memset(f, 0x3f, sizeof(f));
//
//	f[0][0] = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		f[i][0] = f[i - 1][0] + dist(i, 0);
//	}
//	for (int i = 1; i <= m; i++)
//	{
//		f[0][i] = f[0][i - 1] + dist(0, i);
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			ll w = dist(i, j);
//			f[i][j] = min(f[i][j], f[i - 1][j - 1] + w);
//			f[i][j] = min(f[i][j], f[i - 1][j] + w);
//			f[i][j] = min(f[i][j], f[i][j - 1] + w); 
//		}
//	}
//
//	//for (int i = 1; i <= n; i++)
//	//{
//	//	for (int j = 1; j <= m; j++)
//	//	{
//	//		cout << f[i][j] << " ";
//	//	}
//	//	cout << endl;
//	//}
//
//	cout << f[n][m] << endl;
//
//	return 0;
//}



#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
using namespace std;

const int N = 1010;
const int M = 1e5 + 10;

int n, m;
int kind = 0;
string a[N];
string b[M];
unordered_map<string, int> mp;
unordered_set<string> st;
unordered_set<string> tmp;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		st.insert(a[i]);
	}

	cin >> m;
	for (int j = 1; j <= m; j++)
	{
		cin >> b[j];
		if (st.count(b[j]))
		{
			tmp.insert(b[j]);
		}
	}
	int sum = tmp.size();
	int left = 1;
	int right = 1;
	int ret = 0x3f3f3f3f;
	while (right <= m)
	{
		if (st.count(b[right]) == 0)
		{
			right++;
			continue;
		};

		if (mp[b[right]]++ == 0)
		{
			kind++;
		}

		while (kind == sum)
		{
			ret = min(ret, right - left + 1);
			if (--mp[b[left++]] == 0)
			{
				kind--;
			}
		}

		right++;
	}

	cout << sum << endl << ret << endl;

	return 0;
}
